package main

import (
	"context"
	"fmt"
	"github.com/go-redis/redis/v8"
	"time"
)

var ctx = context.Background()

//redis框架其余命令集合
func main() {
	rdb := redis.NewClient(&redis.Options{
		Addr:         "81.68.186.20:6379",
		Password:     "ffdd2021@",
		DB:           0,
		MinIdleConns: 2,
	})
	if rdb != nil {
		fmt.Println("连接redis成功")
		defer rdb.Close()
	}
	//插入一个简单的key 需设置过期时间 如果是0则表示永不过期
	err := rdb.Set(ctx, "ding", "20", 1*time.Hour).Err()
	if err != nil {
		fmt.Println(err)
	}

	//查询当期数据库key的数量
	i, err2 := rdb.DBSize(ctx).Result()
	if err2 != nil {
		fmt.Println(err)
	}
	fmt.Println("当前数据库的key数目为 = ", i)

	//清空当前数据库 所有key都清空 慎用
	// s, err3 := rdb.FlushDB(ctx).Result()
	// if err3!=nil{
	// 	fmt.Println(err3)
	// }
	// fmt.Println(s)
	//FlushAll() 清空所有数据库 慎用 这里没有展示

	//SetEX():设置并指定过期时间 仅当key不存在的时候才设置
	err3 := rdb.SetNX(ctx, "fang", "21", time.Hour*1).Err()
	if err3 != nil {
		fmt.Println(err3)
	}

	//SetNX():设置并指定过期时间 不管该key是否已经存在缓存中直接覆盖
	err4 := rdb.SetEX(ctx, "fang", "20", time.Hour*1).Err()
	if err4 != nil {
		fmt.Println(err4)
	}

	/*Get():获取
	如果要获取的key在缓存中并不存在，Get()方法将会返回redis.Nil*/
	s, err5 := rdb.Get(ctx, "fang").Result()
	if err5 != nil {
		fmt.Println(err)
	}
	fmt.Println("s = ", s)

	/*GetRange():字符串截取方法可以用来截取字符串的部分内容,
	第二个参数是下标索引的开始位置，第三个参数是下标索引的结束位置(不是要截取的长度)*/
	s2, err6 := rdb.GetRange(ctx, "ding", 1, 2).Result()
	if err6 != nil {
		fmt.Println(err6)
	}
	fmt.Println("s2 = ", s2)

}
